上下文管理概述#
上下文管理是 Skills 能够理解项目、代码和用户需求的关键机制。本节将深入探讨 Skills 如何收集、存储、检索和利用上下文信息。
上下文类型#
1. 项目上下文#
1.1 项目结构
项目结构上下文#
包含信息#
- 目录层次结构
- 文件组织方式
- 模块划分
- 资源位置
收集方式#
- 扫描文件系统
- 解析目录结构
- 识别关键目录
- 构建结构树
示例#
bash├── src/ │ ├── main.py │ ├── utils/ │ │ ├── helpers.py │ │ └── validators.py │ └── api/ │ ├── routes.py │ └── models.py ├── tests/ │ ├── test_main.py │ └── test_utils.py ├── docs/ │ └── api.md ├── config/ │ ├── settings.py │ └── logging.yaml ├── requirements.txt ├── setup.py └── README.md ~~~#### 1.2 技术栈 ## 技术栈上下文 ### 包含信息 - 编程语言 - 框架和库 - 构建工具 - 测试框架 - 部署平台 ### 收集方式 - 解析依赖文件 - 检测配置文件 - 分析导入语句 - 识别工具链 ### 示例 ~~~`yaml `yaml technology_stack: language: Python version: "3.9" frameworks: - Flask 2.3.0 - SQLAlchemy 2.0.0 libraries: - requests 2.28.0 - numpy 1.24.0 build_tools: - setuptools - wheel test_frameworks: - pytest 7.3.0 - pytest-cov deployment: - Docker - Kubernetes #### 1.3 配置信息 ## 配置上下文 ### 包含信息 - 应用配置 - 环境变量 - 构建配置 - 部署配置 ### 收集方式 - 读取配置文件 - 解析环境变量 - 分析设置文件 - 检测 CI/CD 配置 ### 示例 ~~~`python `python # config/settings.py class Config: DEBUG = False TESTING = False DATABASE_URI = os.getenv('DATABASE_URI') SECRET_KEY = os.getenv('SECRET_KEY') LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO') class DevelopmentConfig(Config): DEBUG = True class ProductionConfig(Config): DEBUG = False ### 2. 代码上下文 #### 2.1 代码结构 ## 代码结构上下文 ### 包含信息 - 模块组织 - 类层次结构 - 函数定义 - 变量作用域 ### 收集方式 - 解析源代码 - 构建抽象语法树(AST) - 分析符号表 - 追踪依赖关系 ### 示例 ``` src/ ├── main.py │ ├── class Application │ │ ├── method __init__ │ │ ├── method run │ │ └── method shutdown │ └── function main ├── utils/ │ ├── helpers.py │ │ ├── function format_date │ │ └── function validate_email │ └── validators.py │ └── class Validator │ ├── method validate │ └── method sanitize ```> > ~~~ #### 2.2 代码依赖 ## 代码依赖上下文 ### 包含信息 - 导入关系 - 函数调用 - 类继承 - 模块引用 ### 收集方式 - 分析 import 语句 - 追踪函数调用 - 解析类定义 - 构建依赖图 ### 示例 ~~~`python `python # 依赖图 main.py ├─> utils/helpers.py │ ├─> datetime (标准库) │ └─> utils/validators.py │ └─> re (标准库) ├─> api/routes.py │ ├─> flask (外部库) │ └─> api/models.py └─> config/settings.py └─> os (标准库) ```> > ~~~ #### 2.3 代码模式 ## 代码模式上下文 ### 包含信息 - 设计模式 - 编码风格 - 命名约定 - 代码规范 ### 收集方式 - 模式识别算法 - 风格分析 - 命名分析 - 规则检查 ### 示例 ~~~`yaml `yaml code_patterns: design_patterns: - singleton: Application - factory: create_validator - strategy: validate_input coding_style: naming_convention: snake_case max_line_length: 88 docstring_style: Google conventions: - use_type_hints: true - include_docstrings: true - follow_pep8: true ```> > ~~~ ### 3. 用户上下文 #### 3.1 用户偏好 ## 用户偏好上下文 ### 包含信息 - 编码风格偏好 - 工具使用偏好 - 输出格式偏好 - 交互方式偏好 ### 收集方式 - 读取用户配置 - 分析历史操作 - 收集用户反馈 - 学习使用模式 ### 示例 ~~~`yaml `yaml user_preferences: coding_style: language: Python style_guide: PEP8 formatter: black linter: pylint output_preferences: format: markdown verbosity: normal include_code_blocks: true interaction_preferences: auto_confirm: false show_progress: true color_output: true ```> > ~~~ #### 3.2 历史记录 ## 历史记录上下文 ### 包含信息 - 执行过的命令 - 使用过的 Skills - 修改过的文件 - 生成的内容 ### 收集方式 - 记录操作日志 - 追踪文件变更 - 统计使用频率 - 分析操作模式 ### 示例 ~~~`json `json { "history": [ { "timestamp": "2024-01-15T10:30:00Z", "command": "claude --skill code-review --file src/main.py", "skill": "code-review", "files": ["src/main.py"], "result": "success" }, { "timestamp": "2024-01-15T10:35:00Z", "command": "claude --skill generate-tests --file src/utils.py", "skill": "generate-tests", "files": ["src/utils.py", "tests/test_utils.py"], "result": "success" } ] } ```#### 3.3 学习进度 ~~~ markdown ## 学习进度上下文 ### 包含信息 - 掌握的 Skills - 常用的功能 - 遇到的问题 - 改进建议 ### 收集方式 - 跟踪使用情况 - 分析错误模式 - 收集反馈 - 评估熟练度 ### 示例 learning_progress: mastered_skills: - code-review: 85% - generate-tests: 70% - refactor: 60% frequently_used: - code-review: 45 - generate-tests: 30 - format-code: 25 common_issues: - type: parameter_validation frequency: 10 suggestion: "使用 --help 查看参数说明" improvement_suggestions: - "尝试使用更多高级功能" - "学习自定义 Skill 开发" `> > ~~~ ### 4. 会话上下文 #### 4.1 对话历史 ~~~ markdown ## 对话历史上下文 ### 包含信息 - 用户请求 - 系统响应 - 执行的操作 - 中间结果 ### 收集方式 - 记录对话 - 追踪操作 - 保存结果 - 维护状态 ### 示例 { "conversation": [ { "role": "user", "message": "帮我审查 src/main.py 的代码质量", "timestamp": "2024-01-15T10:30:00Z" }, { "role": "assistant", "message": "正在执行代码审查...", "action": "execute_skill", "skill": "code-review", "timestamp": "2024-01-15T10:30:01Z" }, { "role": "assistant", "message": "审查完成!发现 5 个问题。", "result": {...}, "timestamp": "2024-01-15T10:30:15Z" } ] } `> > #### 4.2 执行状态 ~~~markdown markdown ## 执行状态上下文 ### 包含信息 - 当前任务 - 执行进度 - 中间结果 - 错误信息 ### 收集方式 - 跟踪执行 - 记录进度 - 保存状态 - 捕获错误 ### 示例 ~~~yaml ```yaml execution_state: current_task: skill: code-review step: 3/5 status: in_progress progress: completed_steps: - analyze_structure - check_security current_step: evaluate_quality remaining_steps: - generate_report - save_results intermediate_results: issues_found: 3 security_issues: 1 quality_score: 75 errors: [] #### 4.3 资源状态 ```markdown ## 资源状态上下文 ### 包含信息 > - 打开的文件 > - 使用的工具 > - 占用的资源 > - 网络连接 ### 收集方式 > - 监控资源 > - 追踪连接 > - 统计使用 > - 检测泄漏 ### 示例 ~~~yaml ```yaml resource_state: open_files: - src/main.py - src/utils.py - tests/test_main.py active_tools: - read_file - search_codebase - run_command resource_usage: memory: "256MB" cpu: "15%" disk_io: "10MB/s"
network_connections: - type: mcp server: github status: connected
上下文收集#
收集策略#
1. 按需收集
按需收集策略#
原则#
- 只收集需要的上下文
- 避免不必要的开销
- 动态调整收集范围
实现方式#
- 分析 Skill 需求
- 识别必需的上下文
- 延迟加载非关键上下文
- 按需扩展收集范围
示例#
bash`python def collect_context(skill_name, parameters): # 分析 Skill 需求 requirements = analyze_skill_requirements(skill_name) # 收集必需的上下文 context = {} for req in requirements.required: context[req] = collect_required_context(req) # 延迟加载可选上下文 for req in requirements.optional: if should_collect(req, parameters): context[req] = collect_optional_context(req) return context ```> >
2. 增量收集
增量收集策略#
原则#
- 基于已有上下文
- 只收集变更部分
- 减少重复工作
实现方式#
- 维护上下文快照
- 检测变更
- 只更新变更部分
- 复用未变更部分
示例#
bash`python def incremental_collect(previous_context, changes): new_context = previous_context.copy() for change in changes: if change.type == "file_modified": # 只更新变更的文件 new_context["code"][change.file] = analyze_file(change.file) elif change.type == "file_added": # 添加新文件 new_context["code"][change.file] = analyze_file(change.file) elif change.type == "file_deleted": # 删除文件 del new_context["code"][change.file] return new_context ```> > ~~~ #### 3. 并行收集 ## 并行收集策略 ### 原则 - 同时收集多个上下文 - 提高收集效率 - 合理分配资源 ### 实现方式 - 识别独立任务 - 并行执行 - 合并结果 - 处理依赖关系 ### 示例 ~~~`python `python async def parallel_collect(context_types): tasks = [] # 创建并行任务 for ctx_type in context_types: if is_independent(ctx_type): task = asyncio.create_task(collect_context(ctx_type)) tasks.append(task) # 等待所有任务完成 results = await asyncio.gather(*tasks) # 合并结果 context = merge_results(results) return context ```> >
收集优化#
1. 缓存机制
缓存机制#
缓存策略#
- 内存缓存(快速访问)
- 磁盘缓存(持久化)
- 分布式缓存(多节点)
缓存键#
- 上下文类型
- 文件路径
- 时间戳
- 版本号
缓存失效#
- 文件变更
- 配置更新
- 时间过期
- 手动清除
示例#
bash`python class ContextCache: def __init__(self): self.memory_cache = {} self.disk_cache = DiskCache() def get(self, key): # 先查内存缓存 if key in self.memory_cache: return self.memory_cache[key] # 再查磁盘缓存 value = self.disk_cache.get(key) if value: self.memory_cache[key] = value return value return None def set(self, key, value, ttl=3600): # 设置内存缓存 self.memory_cache[key] = value # 设置磁盘缓存 self.disk_cache.set(key, value, ttl) ```> > ~~~ #### 2. 智能过滤 ## 智能过滤 ### 过滤策略 - 相关性分析 - 重要性评分 - 优先级排序 - 数量限制 ### 过滤维度 - 文件类型 - 代码复杂度 - 修改频率 - 使用频率 ### 示例 ~~~`python `python def filter_context(context, requirements): filtered = {} # 按相关性过滤 for item in context.items(): relevance = calculate_relevance(item, requirements) if relevance > threshold: filtered[item.key] = item.value # 按重要性排序 sorted_items = sort_by_importance(filtered) # 限制数量 limited = limit_items(sorted_items, max_items) return limited ```> >
3. 压缩技术
压缩技术#
压缩策略#
- 摘要压缩
- 去重压缩
- 结构压缩
- 算法压缩
压缩方法#
- 提取关键信息
- 移除冗余数据
- 简化结构
- 使用压缩算法
示例#
bash`python def compress_context(context): compressed = {} for key, value in context.items(): # 摘要压缩 if is_large(value): compressed[key] = summarize(value) # 去重压缩 elif has_duplicates(value): compressed[key] = deduplicate(value) # 结构压缩 else: compressed[key] = simplify_structure(value) return compressed ```## 上下文存储 ### 存储结构 #### 1. 层次结构
markdown
层次存储结构#
存储层次#
存储策略#
- 热数据存内存
- 温数据存磁盘
- 冷数据存远程
示例#
Context Storage ├── Memory Layer │ ├── Current Session │ ├── Active Skills │ └── Frequently Used ├── Disk Layer │ ├── Project Context │ ├── User Preferences │ └── Historical Data └── Remote Layer │ ├── Backup Data │ ├── Shared Context │ └── Archive Data
bash~~~ #### 2. 索引结构 ~~~markdown markdown ## 索引结构 ### 索引类型 - 文件索引 - 符号索引 - 依赖索引 - 时间索引 ### 索引优化 - B+ 树索引 - 哈希索引 - 全文索引 - 倒排索引 ### 示例 class ContextIndex: def __init__(self): self.file_index = BPlusTree() self.symbol_index = HashIndex() self.dependency_index = GraphIndex() self.time_index = TimeSeriesIndex() def add(self, context_item): # 添加到多个索引 self.file_index.add(context_item.path, context_item) self.symbol_index.add(context_item.symbols, context_item) self.dependency_index.add(context_item.dependencies, context_item) self.time_index.add(context_item.timestamp, context_item) def query(self, query): # 组合查询 results = [] if query.path: results.extend(self.file_index.query(query.path)) if query.symbols: results.extend(self.symbol_index.query(query.symbols)) return deduplicate(results) `````> > ~~~ ### 存储优化 #### 1. 增量更新 ~~~markdown markdown ## 增量更新 ### 更新策略 - 检测变更 - 只更新变更部分 - 维护版本历史 - 支持回滚 ### 实现方式 - 文件监控 - 变更检测 - 差异计算 - 增量应用 ### 示例 def incremental_update(context, changes): for change in changes: if change.type == "modified": # 计算差异 diff = calculate_diff(context[change.file], change.new_content) # 应用差异 context[change.file] = apply_diff(context[change.file], diff) elif change.type == "added": # 添加新文件 context[change.file] = change.new_content elif change.type == "deleted": # 删除文件 del context[change.file] return context `````> > ~~~ #### 2. 版本控制 ~~~markdown markdown ## 版本控制 ### 版本策略 - 时间戳版本 - 增量版本 - 标签版本 - 分支版本 ### 版本操作 - 创建版本 - 切换版本 - 比较版本 - 合并版本 ### 示例 class ContextVersionManager: def __init__(self): self.versions = {} self.current_version = None def create_version(self, label=None): version = { "id": generate_id(), "timestamp": datetime.now(), "label": label, "context": copy.deepcopy(self.current_context) } self.versions[version["id"]] = version self.current_version = version["id"] return version["id"] def switch_version(self, version_id): if version_id in self.versions: self.current_version = version_id self.current_context = copy.deepcopy(self.versions[version_id]["context"]) return True return False `````> > ~~~ ## 上下文检索 ### 检索策略 #### 1. 精确检索 ~~~markdown markdown ## 精确检索 ### 检索方式 - 按键检索 - 按路径检索 - 按符号检索 - 按时间检索 ### 示例 def exact_retrieve(context, query): if query.type == "key": return context.get(query.key) elif query.type == "path": return context.get_file(query.path) elif query.type == "symbol": return context.get_symbol(query.symbol) elif query.type == "time": return context.get_by_time(query.time_range) `````> > ~~~ #### 2. 模糊检索 ~~~markdown markdown ## 模糊检索 ### 检索方式 - 模糊匹配 - 相似度检索 - 语义检索 - 关联检索 ### 示例 def fuzzy_retrieve(context, query): results = [] for item in context.items(): # 计算相似度 similarity = calculate_similarity(item, query) if similarity > threshold: results.append((item, similarity)) # 按相似度排序 results.sort(key=lambda x: x[1], reverse=True) return [item for item, _ in results] #### 3. 组合检索 ~~~ markdown ## 组合检索 ### 检索方式 - 多条件组合 - 逻辑运算 - 权重组合 - 分级检索 ### 示例 ~~~python ```python def combined_retrieve(context, query): results = [] # 执行多个检索 for condition in query.conditions: partial_results = retrieve(context, condition) results.extend(partial_results) # 应用逻辑运算 if query.operator == "AND": results = intersect(results) elif query.operator == "OR": results = union(results) # 应用权重 weighted_results = apply_weights(results, query.weights) return weighted_results ### 检索优化 #### 1. 预计算 ~~~`markdown ````markdown ## 预计算 ### 预计算内容 > - 统计信息 > - 关联关系 > - 索引数据 > - 聚合结果 ### 预计算时机 > - 上下文更新时 > - 定期批处理 > - 按需触发 ### 示例 ~~~python ```python def precompute_context(context): # 计算统计信息 stats = calculate_statistics(context) context.statistics = stats # 计算关联关系 relations = calculate_relations(context) context.relations = relations # 构建索引 index = build_index(context) context.index = index ```> > #### 2. 查询优化 ~~~`markdown `markdown ## 查询优化 ### 优化策略 > - 查询重写 > - 执行计划优化 > - 索引选择 > - 结果缓存 ### 示例 ~~~python ```python def optimize_query(query, context): # 查询重写 optimized = rewrite_query(query) # 选择最佳索引 best_index = select_best_index(optimized, context.indexes) # 生成执行计划 plan = generate_execution_plan(optimized, best_index) return plan ``` ## 总结 Skills 的上下文管理是一个复杂而精密的系统,涉及多种上下文类型、收集策略、存储机制和检索方法。有效的上下文管理能够: 1. **提高准确性**:提供更准确的上下文信息 2. **提升性能**:优化上下文收集和检索效率 3. **增强体验**:提供更流畅的用户体验 4. **支持扩展**:为功能扩展提供基础 在下一节中,我们将探讨 Skills 与主代理的交互机制,了解 Skills 如何与主代理协同工作。 ``` ~~~